package com.agile.springboot.service.impl;

import com.agile.springboot.service.QuestionService;
import com.agile.springboot.dao.QuestionMapper;
import com.agile.springboot.entity.Question;
import com.agile.springboot.utils.UUIDUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Service
public class QuestionServiceImpl implements QuestionService {

    @Resource
    QuestionMapper questionMapper;

    /**
     * 新增问题
     * @param question 问题实体
     * @return 返回值为1，则说明新增问题成功
     */
    @Override
    public int addQuestion(Question question) {
        question.setIs_deleted(0);
        question.setId(UUIDUtil.getOneUUID());
        return questionMapper.insert(question);
    }

    /**
     * 逻辑删除问题
     * @param id 问题id
     * @return 返回值为1，则说明逻辑删除问题成功
     */
    @Override
    public int deleteQuestion(String id) {
        return questionMapper.deleteById(id);
    }

    /**
     * 物理删除问题
     * @param id 问题id
     * @return 返回值为1，则说明物理删除问题成功
     */
    @Override
    public int pscDeleteQuestion(String id) {
        return questionMapper.pscDeleteById(id);
    }

    /**
     * 修改问题信息
     * @param question 问题实体
     * @return 返回值为1，则说明修改问题信息成功
     */
    @Override
    public int updateQuestion(Question question) {
        return questionMapper.updateById(question);
    }

    /**
     * 精准搜索问题——根据问题id
     * @param id 问题id
     * @return Question实体
     */
    @Override
    public Question searchQuestionById(String id) {
        QueryWrapper<Question> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("id",id);
        return questionMapper.selectOne(queryWrapper);
    }

    /**
     * 获取题目——根据问卷id
     * @param questionnaire_id 问卷id
     * @return List<Question> 题目列表
     */
    @Override
    public List<Question> GetQuestionsByQuestionnaireId(String questionnaire_id) {
        QueryWrapper<Question> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq(questionnaire_id!=null,"questionnaire_id", questionnaire_id);
        return questionMapper.selectList(queryWrapper);
    }

    /**
     * 搜索相同问题——根据问题id
     * @param id 问题id,注意应当是被复制的那个问题的id
     * @return List<Question> 所有相同问题链表
     */
    @Override
    public List<Question> searchAllSameQuestionByRootId(String id){
        Question rootQuestion = searchQuestionById(id);

        //查询该问题id对应的所有相同问题
        QueryWrapper<Question> queryWrapper = new QueryWrapper<>();
        Map<String,Object> map = new HashMap<>();
        map.put("copy_from",id);
        List<Question> questionList = questionMapper.selectList(queryWrapper.allEq(map));

        if(rootQuestion!=null) {
            questionList.add(0, rootQuestion);
        }

        return questionList;
    }
}
